/*
 * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @Date: 2024-04-26 13:43:27
 * @LastEditors: icymoon911 icymoon911@163.com
 * @LastEditTime: 2024-07-31 15:43:33
 * @FilePath: \ken147258.topayClient\src\utils\index.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */

import type { App } from "vue";
import { dayjs } from "element-plus";
import { String } from "lodash";
import { useUserStore } from "@/store";

const loginTypeArr = ['other', 'payee', 'payer'];

/**
 * Check if an element has a class
 * @param {HTMLElement} ele
 * @param {string} cls
 * @returns {boolean}
 */
export function hasClass(ele: HTMLElement, cls: string) {
  return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
}

/**
 * Add class to element
 * @param {HTMLElement} ele
 * @param {string} cls
 */
export function addClass(ele: HTMLElement, cls: string) {
  if (!hasClass(ele, cls)) ele.className += " " + cls;
}

/**
 * Remove class from element
 * @param {HTMLElement} ele
 * @param {string} cls
 */
export function removeClass(ele: HTMLElement, cls: string) {
  if (hasClass(ele, cls)) {
    const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
    ele.className = ele.className.replace(reg, " ");
  }
}

/**
 * 判断是否是外部链接
 *
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path: string) {
  const isExternal = /^(https?:|http?:|mailto:|tel:|link:)/.test(path);
  return isExternal;
}

/**
 * 设置Style属性
 *
 * @param propName
 * @param value
 */
export function setStyleProperty(propName: string, value: string) {
  document.documentElement.style.setProperty(propName, value);
}

// 传入time的时间，返回格式化后的时间
export function getFormatDate(time: number, format: string = "YYYY-MM-DD HH:mm:ss") {
  const formatDate = time ? dayjs(time).format(format) : time;
  return formatDate || '-';
}

export function getLoginType() {
  return 'web';

  // const userStore = useUserStore();
  // let loginType = userStore.getLoginType();

  // if (!loginType) {
  //   const id = window.location.pathname.split('/').filter(item => item).shift();

  //   if (loginTypeArr.includes(id)) {
  //     userStore.SET_LOGIN_TYPE(id);

  //     loginType = userStore.getLoginType();
  //   }
  // }

  // return loginType;
}

// 将格式化后的时间格式转成时间戳（去掉最后三位）
export function getTimestamp(time?: String | Date | Number | null): number | null {
  let timestamp = null;
  // 判断是否为数字
  if (Number.isFinite(time)) {
    // 截取最后三位
    timestamp = time;
  } else {
    timestamp = time ? dayjs(time) : time;
  }

  return timestamp;
}


/**
 * switchFieldHandle是一个提供字段处理方法的对象。
 */
export const switchFieldHandle = {
  /**
   * 根据给定的字段判断其显示状态。
   * @param field 任意类型的字段，用于判断显示状态。
   * @returns 返回一个布尔值，当字段值为1时返回true，否则返回false。
   */
  getDisplay(field: any) {
    return (field || "").toString() === "1";
  },
  /**
   * 根据给定的布尔字段返回对应的字段值。
   * @param field 布尔类型的字段，true对应"1"，false对应"2"。
   * @returns 返回一个字符串，根据field的值返回"1"或"2"。
   */
  getField(field: Boolean) {
    return field ? "1" : "2";
  },
};

// 全局注册 自定义方法
export function setupFunc(app: App<Element>) {
  app.provide('getFormatDate', getFormatDate);
  app.provide('getTimestamp', getTimestamp);
  app.provide('switchFieldHandle', switchFieldHandle);
}
